/*
 * Created on 30-ene-2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.juanfrivaldes.cio2005.web;

import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.dao.DataAccessException;
import org.springframework.mail.MailException;

import com.juanfrivaldes.cio2005.domain.Ponencia;
import com.juanfrivaldes.cio2005.domain.Usuario;

/**
 * @author root
 * 
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 */
public class AltaPonenciaFinalAction extends AltaPonenciaAction {

	protected String directory="/cio2005-ponencias/";

	private static Log log = LogFactory.getLog(AltaPonenciaFinalAction.class);

	protected ActionForward protectedExecute(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		if (isCancelled(request)) {
			return mapping.findForward("inicio");
		}

		AltaPonenciaFinalForm altaForm = (AltaPonenciaFinalForm) form;
		Usuario user = (Usuario) request.getSession(false).getAttribute(
				"currentUser");
		
		log.trace("current user:" + user.getEmail());
		Ponencia ponencia = (Ponencia) request.getSession(false).getAttribute(
		"currentPonencia");

		log.trace("current ponencia: "+ponencia.getId()+" "+altaForm.getId()+"TIPO: "+altaForm.getTipo());

		try {
			
			ponencia.setTipo(altaForm.getTipo());
			
			
			

			try {
				writeFile(altaForm.getArchivo(), directory
						+ ponencia.getId() + ".pdf");
			} catch (IOException e) {
				log.trace("Error de entrada salida en ponencia FINAL"
						+ ponencia.getTitulo() + " de " + ponencia.getAutor()
						+ ": " + e.getMessage());
				// damos el error porque al fin y al cabo la ponencia no se
				// registro
				// (bueno,si)
				return mapping.findForward("ioFailure");
			}

			this.getCio2005().marcaPonenciaFinal(ponencia);
			try {
				
				getCio2005().sendMailPonenciaFinal(user, ponencia);
			} catch (MailException e) {
				log.trace("Envio Fallido de alta a la dirección "
						+ user.getEmail() + ":\n" + e.getMessage());
			}

			request.getSession(false).setAttribute("currentPonencia", null);
			request.setAttribute("nuevaPonencia", ponencia);

			altaForm.setTipo("ponencia");
			altaForm.setId(0);
			log.trace("restaurados campos");

		} catch (Exception e) {
			log.trace("Registro FALLIDO (Excepcion no capturada) de ponencia FINAL para"
					+ user.getEmail() + "--" + ponencia.getTitulo() + "\n");
			log.trace(e.getMessage());
			log.trace(e.getCause());
			log.trace(e.getStackTrace());
			return mapping.findForward("dataFailure");
		}
		return mapping.findForward("success");

	}

	

}
